package LeetCode刷题;

/**
 * @program: Java_Study
 * @author: Xiaofan
 * @createTime: 2021-10-20 16:44
 * @description: Functions of this class is
 * 从10000万个数里选出前100个最大的数据。
 *
 * 首先我们先分析：
 * 既然要选出前100个最大的数据，我们就建立一个大小为100的堆（建堆时就按找最大堆的规则建立，即每一个根节点都大于它的子女节点），
 * 然后再将后面的剩余数据若符合要求就插入堆中，不符合就直接丢弃该数据。
 *
 * 那我们现在考虑：确定是该选择最大堆的数据结构还是最小堆的数据结构呢。
 * 分析一下：
 * 若选用最大堆的话，堆顶是堆的最大值，我们考虑既然要选出从10000万个数里选出前100个最大的数据，
 * 我们在建堆的时候，已经考虑了最大堆的特性，那这样的话最大的数据必然在它顶端。
 * 假若真不巧，我开始的前100个数据中已经有这10000个数据中的最大值了，
 * 那对于我后面剩余的10000-100的元素再想入堆是不是入不进去了！！！所以，选用最大堆从10000万个数里选出前100个最大的数据只能找出一个，而不是100个。
 *
 * 那如果选用最小堆的数据结构来解决，最顶端是最小值，再次遇到比它大的值，
 * 就可以入堆，入堆后重新调整堆，将小的值pass掉。
 * 这样我们就可以选出最大的前K个数据了。言外之意，假若我们要找出N个数据中最小的前k个数据，就要用最大堆了。
 **/
public class 最小堆实现找前k个最大的数 {
    public static void main(String args[]){


    }
}